在我們開始將資料開始匯集的同時,可以先開始著手設定搜尋引擎的設定。
作為收錄內容的產品,一定會要有一個好用的搜尋引擎,可以方便提供給使用者一個快速瀏覽,但又可以貼切喜好的工具。
在這邊我們選用了 Algolia 作為這次的搜尋引擎供應商,Algolia 是一家法國的新創公司,他們提供易用的後台與完整的 SDK 周邊工具,在針對應用的內容建立索引十分快速的同時,又有不輸 Google 搜尋那樣有效率的查詢速度。
當然如果在有時間跟人員的情況下,也可以考慮開源的替代方案:
Elasticsearch: https://github.com/elastic/elasticsearch
Meilisearch: https://github.com/meilisearch/meilisearch
Typesense: https://github.com/typesense/typesense
以上的解決方案都有開源自建版本,與雲服務版本可以參考比較,可以依照資料型態去比較一下哪一個方案比較適合。
在這邊不免俗的就要使用 Laravel 官方已經有支援的搜尋整合套件 Laravel Scout
相關的整合已經被 Laravel Scout 串了差不多了,所以安裝步驟很簡單:
composer require laravel/scout "algolia/scout-extended:^2.0" algolia/algoliasearch-client-php
php artisan vendor:publish --provider="Laravel\Scout\ScoutServiceProvider"
然後記得要把需要可以搜尋的 model 引入 Searchable
// Episode.php
use Laravel\Scout\Searchable;
class Episode extends Base
{
use Searchable;
// ...
}
然後把需要可以搜尋的資料,在上傳建立索引前重新整理一次。
這邊我另外將 channel 的 title 與 slug 另外拉出來,這樣可以方便在 web 在得到搜尋結果時,可以讓使用者可以快速跳至某個 podcast 清單頁。
// Episode.php
public function toSearchableArray(): array
{
$array = $this->toArray();
$channel = $this->channel
$array['channel_title'] = $channel->title;
$array['channel_slug'] = $channel->slug;
return Arr::only($array, [
'id',
'locale',
'title',
'metadata',
'channel_title',
'channel_slug',
'metadata',
]);
}
在把需要使用的 model 部分都使用上面的方式都設定過一輪,之後就可以開始建立索引了
php artisan scout:import
下一篇會再來深入 Algolia 部分的進階用法與設定調整。